/*
 *  Copyright (c) 2009 Baturu.COM
 * 
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 * 
 *       http://www.apache.org/licenses/LICENSE-2.0
 * 
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *  under the License.
 */

package com.baturu.oss.dao;

import com.baturu.oss.dao.jpa.OpenSiteOptionDAOImpl;
import com.baturu.oss.dao.jpa.OpenCategoryDAOImpl;
import com.baturu.oss.dao.jpa.OpenLinkDAOImpl;
import com.baturu.oss.dao.jpa.OpenPostDAOImpl;
import com.baturu.oss.dao.jpa.OpenUserDAOImpl;
import com.baturu.oss.utils.OpenEntityManagerFactory;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;

/**
 * The sole entrance to getting DAO interfaces.
 * 
 * @author <a href="mailto:javafuns@baturu.com">javafuns</a>
 */
public class OpenDAOManager {
    private PersistenceManager pm;

    private OpenDAOManager(PersistenceManager pm) {
        this.pm = pm;
    }

    public static OpenDAOManager newInstance() {
        PersistenceManagerFactory pmf = OpenEntityManagerFactory.getInstance();
        return new OpenDAOManager(pmf.getPersistenceManager());
    }

    public void startTransaction() {
        this.pm.currentTransaction().begin();
    }

    public void commitTransaction() {
        this.pm.currentTransaction().commit();
    }

    public void rollback() {
        this.pm.currentTransaction().rollback();
    }

    public void close() {
        this.pm.close();
    }

    public OpenPostDAO getPostDAO() {
        return new OpenPostDAOImpl(pm);
    }

    public OpenUserDAO getUserDAO() {
        return new OpenUserDAOImpl(pm);
    }

    public OpenLinkDAO getLinkDAO() {
        return new OpenLinkDAOImpl(pm);
    }

    public OpenCategoryDAO getCategoryDAO() {
        return new OpenCategoryDAOImpl(pm);
    }

    public OpenSiteOptionDAO getOptionDAO() {
        return new OpenSiteOptionDAOImpl(pm);
    }
}
